博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【重要】统一管理碎片代码,跟混乱代码说再见
阅读量:6965 次
发布时间:2019-06-27

本文共 13001 字,大约阅读时间需要 43 分钟。

我们在日常运输代码的时候,时常因为代码过于混乱而导致时间长了代码多了之后难以搬运,即便是老司机都得打起十二分精神,比如类似于下面这样的代码(大家一眼划过就行了):

$(document).ready(function(){            if (!getCookie("showNotice")) {                setCookie("showNotice", "1",1);                document.querySelector(".shadowBg").style.display = "flex";                document.querySelector(".new_year_notice span").addEventListener('click', function () {                    document.querySelector(".shadowBg").style.display = "none";                });            }             var newBanner = mcBanner();            newBanner.switchBanner('mcBannerBox', '.mcBannerChild', '.bannerDotBox', 5000);                        sliderBox({                id: document.getElementById('dynamic-list'),                direction: 'top',                intervalTime: 5000            });            sliderBox({                id: document.getElementById('honor-box'),                direction: 'left',                intervalTime: 6000,                clickLeft: document.getElementById('honor-box-left'),                clickRight: document.getElementById('honor-box-right')            });            let _countTo = document.querySelectorAll('.countTo'),                _countTo_len = _countTo.length;            for (let i=0; i < _countTo_len; i++) {                countTo({                    id: _countTo[i],                });            }            slideWord(document.getElementById('slideHonor'));            $.ajax({                url:'/payusercount',                type:'GET',                dataType:'json',                success:function(data){                    var _box = document.getElementById("box");                    for (var i = 0; i < data.length; i++) {                        _box.innerHTML += "
  • "+ data[i].mobile +"已购买"+ data[i].month +"个月
  • " } sliderBox({ id: document.getElementById('box'), direction: 'top', intervalTime: 3000 }); } }) $.ajax({ url:'/platform', type:'GET', dataType:'json', success:function(data){ document.getElementById("statistics1").dataset.count = data[0].number; document.getElementById("statistics2").dataset.count = data[1].number; document.getElementById("statistics3").dataset.count = data[2].number; document.getElementById("statistics4").dataset.count = data[3].number; let _countTo = document.querySelectorAll('.countTo'), _countTo_len = _countTo.length; for (let i=0; i < _countTo_len; i++) { countTo({ id: _countTo[i], }); } } }) }) $.ajax({ url:'/news/category', type:'GET', dataType:'json', success:function(data){ var artStr = ''; var categoryCount = 0; for (var item in data.categories) { if(categoryCount > 2) break; categoryCount++; var articleCount=0; var temStr = '' var strHead = ''; var strBottom = ''; var str = ''; strHead += '
  • '; strBottom += '

    查看更多>>

  • ' newitem = data.categories[item].id; for (var articleItem in data.articleLists[newitem]) { articleCount++; if(articleCount == 5) break; str += "

    "; str += data.articleLists[newitem][articleItem].name str += "

    "; }; temStr = strHead + str + strBottom; artStr += temStr }; $('.e-artical').append(artStr); } })复制代码

    这段代码好像还挺长的,其实仅仅是冰山一角。一个项目中如果都是这样的代码,基本可以说是废了,因为项目在日常不断的迭代当中,我们就只能不断地堆积代码,不断地让整个项目更加的混乱和臃肿。

    另外不得不说的是,现在很多小伙伴都会用框架来开发项目,但是,请记住,只要你对自己有有足够的信心足够的随意,你依然可以写出很混乱的代码,相信我,真的!

    下面献上整理过后的代码,相关的解释直接穿插到代码相应位置的注释中,方便理解

    $(document).ready(function(){            var thisPageThings = (function () {                 /*这外面可以写可以在下面的对象的方法中                  多次利用的函数,在这里也可以认为是私有函数                */                return {                     /*每次增加相关代码,请在对象里面新建方法,                  把新增的代码写在新建的代码里面,统一管理所有碎片代码,                  把混乱的代码切割为一块块的碎片*/                    addBan: function () {                        $('.addBan').click(function () {                            var id = $(this).data('id');                            $.ajax({                                url:'/addclick',                                type:'GET',                                data:{
    'id':id}, success:function(res){ console.log(res); } }) }); }, onceModal: function () { var res = document.cookie.indexOf("first_visit"); if(res == -1){ var exp =new Date(); console.log(exp.getTime()); exp.setTime(exp.getTime() + (21 - exp.getHours()) * 60 * 60 * 1000); //提前一小时吧 document.cookie ="first_visit=1;expires=" + exp.toGMTString(); //5秒测试 document.querySelector(".shadowBg").style.display = "flex"; document.querySelector(".new_year_notice span").addEventListener('click', function () { document.querySelector(".shadowBg").style.display = "none"; }); } }, mcBannerBox: function () { $('.mcBannerChild').length > 1 && (function () { var newBanner = mcBanner(); newBanner.switchBanner('mcBannerBox', '.mcBannerChild', '.bannerDotBox', 5000); }()); }, dynamicList: function () { $('#dynamic-list').children().length && sliderBox({ id: document.getElementById('dynamic-list'), direction: 'top', intervalTime: 5000 }); }, honorBox: function () { $('#honor-box').children().length && sliderBox({ id: document.getElementById('honor-box'), direction: 'left', intervalTime: 6000, clickLeft: document.getElementById('honor-box-left'), clickRight: document.getElementById('honor-box-right') }); }, slideHonor: function () { slideWord(document.getElementById('slideHonor')); }, payusercountAjax: function () { var _this = this; $.ajax({ url:'/payusercount', type:'GET', dataType:'json', success:function(data){ _this.event.publish('payusercountAjax', data); } }); }, platformAjax: function () { var _this = this; $.ajax({ url:'/platform', type:'GET', dataType:'json', success:function(data){ _this.event.publish('platformAjax', data); } }) }, categoryAjax: function () { var _this = this; $.ajax({ url:'/news/category', type:'GET', dataType:'json', success:function(data){ _this.event.publish('categoryAjax', data); } }) }, //此处放置所有的订阅 allSubscription: function () { this.event.subscribe('payusercountAjax', function (data) { var _box = document.getElementById("box"); for (var i = 0; i < data.length; i++) { _box.innerHTML += "
  • "+ data[i].mobile +"已购买"+ data[i].month +"个月
  • " } sliderBox({ id: document.getElementById('box'), direction: 'top', intervalTime: 3000 }); }); this.event.subscribe('platformAjax', function (data) { var _countTo = document.querySelectorAll('.countTo'), _countTo_len = _countTo.length; for (var i=0; i < _countTo_len; i++) { document.getElementById("statistics" + i).dataset.count = data[i].number; countTo({ id: _countTo[i] }); } }); this.event.subscribe('categoryAjax', function (data) { var artStr = ''; var categoryCount = 0; for (var item in data.categories) { if(categoryCount > 2) break; categoryCount++; var articleCount=0; var temStr = ''; var strHead = ''; var strBottom = ''; var str = ''; strHead += '
  • '; strBottom += '

    查看更多>>

  • '; newitem = data.categories[item].id; for (var articleItem in data.articleLists[newitem]) { articleCount++; if(articleCount == 5) break; str += "

    "; str += data.articleLists[newitem][articleItem].name; str += "

    "; } temStr = strHead + str + strBottom; artStr += temStr } $('.e-artical').append(artStr); }); } }; }()); //此处为上面自执行代码的相关配置,如果需要组织代码比如说一些设计模式 (function () { //发布和订阅的方法模板,这里其实就是一个发布订阅模式 var event = { clientList: [], subscribe: function (key, fn) { if (!this.clientList[key]) { this.clientList[key] =[]; } this.clientList[key].push(fn); }, publish: function () { var key = Array.prototype.shift.call( arguments ), fns = this.clientList[ key ]; if ( !fns || fns.length === 0 ) { return false; } for ( var i = 0, fn; fn = fns[ i++ ]; ) { fn.apply( this, arguments); } } }; //将发布订阅的方法集成到要使用的对象中 var installEvent = function (obj) { obj[ 'event' ] = event; }; installEvent( thisPageThings ); //统一执行所有的代码碎片 for (var thing in thisPageThings) { typeof thisPageThings[thing] === 'function' && thisPageThings[thing](); } }()); });复制代码

    从一开始就让代码结构化是很有好处的,一方面提高可读性,另一方面为以后的扩展提供了想象空间,比如自执行的相关配置可以整理出一个公用文件,方便随处可用;就算只有单个地方会用到,这么个结构就很方便我们做到DRY——don't repeat yourself!

    转载地址:http://jxwsl.baihongyu.com/

    你可能感兴趣的文章
    怎么让composer加速
    查看>>
    win8和win7下解决php5.3和5.4、5.5等不能加载php_curl.dll的终极解决办法 收藏
    查看>>
    浅谈C++中指针和引用的区别
    查看>>
    解决mybatis使用枚举的转换
    查看>>
    Java 中常用缓存Cache机制的实现《二》
    查看>>
    Intellij Idea 常用快捷键
    查看>>
    SDWebImage 加载网络图片失败,重新运行,就能加载成功。
    查看>>
    Lamp后端开发技能表v0.1(转)
    查看>>
    java集群之session共享解决方案
    查看>>
    HTML - HTML Commonly Used Character Entities
    查看>>
    NGUI裁剪模型和粒子
    查看>>
    hiho_1086_browser_caching
    查看>>
    绘制图表改变其大小
    查看>>
    观察者模式
    查看>>
    利用Nodejs快速构建应用原型
    查看>>
    【iOS】UITabView/UICollectionView 全选问题
    查看>>
    Xamarin Android提示内存溢出错误
    查看>>
    使用Objective-C的文档生成工具:appledoc
    查看>>
    制作 macOS Sierra 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
    查看>>
    maven install 时提示“程序包 javax.crypto不存在”
    查看>>